'''
备份文件
1. 接收用户输入的文件名
2. 判断这个文件是否存在
3. 如果存在，备份这个文件
    备份的文件名：xxx[备份号].后缀
4. 如果不存在，直接结束
'''

import os

# 检查文件名是否合法
def check_file_name(file_name):
    if not file_name:
        return False
    if len(file_name) > 255:
        return False
    if file_name.find('\\') != -1:
        return False
    if file_name.find('/') != -1:
        return False
    if file_name.find(':') != -1:
        return False
    if file_name.find('*')!= -1:
        return False
    if file_name.find('?')!= -1:
        return False
    if file_name.find('"')!= -1:
        return False
    if file_name.find('<')!= -1:
        return False
    if file_name.find('>')!= -1:
        return False
    if file_name.find('|')!= -1:
        return False
    return True
# 检查文件是否存在
def check_file_exist(file_name):
    if not os.path.exists(file_name):
        return False
    return True



# 备份文件

def bakup_file():

    while True:
        old_name = input('请输入要备份的文件的名字：')
        # 检查文件名是否为空
        if not old_name.strip():
            print("文件名不能为空，请重新输入。")
            continue
        # 检查文件名是否包含非法字符
        invalid_chars = '/\\:*?"<>|'
        if any(char in old_name for char in invalid_chars):
            print(f"文件名包含非法字符 {invalid_chars}，请重新输入。")
            continue
        # 检查文件是否存在
        if not os.path.exists(old_name):
            print("文件不存在，请重新输入。")
            continue
        break

        index = old_name.rfind('.') # 找到最后一个.的位置
        if index > 0:
            postfix = old_name[index:] # 后缀
        else:
            postfix = '' # 没有后缀
        num = 1
        new_name = old_name[:index] + '备份[' + str(num) + ']' + postfix # 备份的文件名
        if os.path.exists(new_name):
            num += 1
            new_name = old_name[:index] + '备份[' + str(num) + ']' + postfix # 备份的文件名
        else:
            break
         # os.rename(old_name, new_name)

        print(old_name)
        print(new_name)
        # 复制文件
        with open(old_name, 'rb') as f:
            with open(new_name, 'wb') as f2:
                while True:
                    content = f.read(1024)
                    if content:
                        f2.write(content)
                    else:
                        break




bakup_file()

'''
如何避免输入无效的文件名？

'''